"""
配置文件管理模块
用于集中管理测试框架的配置参数
"""
import os
import yaml
from dotenv import load_dotenv

# 加载.env文件中的环境变量（如果存在）
load_dotenv()

class Config:
    """配置类，用于管理测试框架的所有配置"""
    
    def __init__(self):
        self._config = {}
        self._load_config()
    
    def _load_config(self):
        """加载配置文件"""
        # 默认配置
        self._config = {
            'base_url': 'http://localhost:8080',
            'timeout': 10000,  # 默认超时时间（毫秒）
            'screenshot_dir': os.path.join(os.path.dirname(os.path.dirname(__file__)), "reports", "screenshots"),
            'headless': False,  # 默认非无头模式
            'browser': 'chromium',  # 默认浏览器
            'viewport': {
                'width': 1280,
                'height': 720
            },
            'slow_mo': 0,  # 慢动作模式，0表示不启用
            'retry_count': 2,  # 测试失败重试次数
        }
        
        # 尝试从YAML文件加载配置
        config_file = os.path.join(os.path.dirname(__file__), 'config.yaml')
        if os.path.exists(config_file):
            try:
                with open(config_file, 'r', encoding='utf-8') as f:
                    yaml_config = yaml.safe_load(f)
                    if yaml_config:
                        self._config.update(yaml_config)
            except Exception as e:
                print(f"加载配置文件失败: {e}")
        
        # 从环境变量覆盖配置
        if os.environ.get('BASE_URL'):
            self._config['base_url'] = os.environ.get('BASE_URL')
        
        if os.environ.get('TIMEOUT'):
            self._config['timeout'] = int(os.environ.get('TIMEOUT'))
        
        if os.environ.get('HEADLESS'):
            self._config['headless'] = os.environ.get('HEADLESS').lower() == 'true'
    
    def get(self, key, default=None):
        """获取配置项"""
        return self._config.get(key, default)
    
    @property
    def base_url(self):
        """获取基础URL"""
        return self._config.get('base_url')
    
    @property
    def timeout(self):
        """获取超时时间"""
        return self._config.get('timeout')
    
    @property
    def screenshot_dir(self):
        """获取截图目录"""
        return self._config.get('screenshot_dir')
    
    @property
    def headless(self):
        """获取是否无头模式"""
        return self._config.get('headless')
    
    @property
    def browser(self):
        """获取浏览器类型"""
        return self._config.get('browser')
    
    @property
    def viewport(self):
        """获取视口大小"""
        return self._config.get('viewport')

# 创建全局配置实例
config = Config()